package ctrl;
import model.*;

import java.util.*;

public class LoanCtrl
{
    // instance variables
    private LoanCon lc;
    private DVDCtrl dc;
    private PersonCtrl pc;

    /**
     * Constructor for objects of class LoanCtrl
     */
    public LoanCtrl()
    {
        // initialise instance variables
        lc = lc.getInstance();
        dc = new DVDCtrl();
        pc = new PersonCtrl();
    }
    
    /**
     * Metoden finder en person, ved søgning på phone
     * @param phone phone søges på, for at finde en person
     * @return Returnerer en person, som er fundet ved hjælp af phone
     */
    public Person findPerson(String phone)
    {
        return pc.findPerson(phone);
    }
    
    /**
     * Denne metode finder en copy, ved søgning på serialNumber
     * @param serialNumber serialNumber søges på, for at finde en copy
     * @return Returnerer en copy, som er fundet ved hjælp af serialNumber
     */
    public Copy findCopy(String serialNumber)
    {
        return dc.findCopy(serialNumber);
    }
    
    /**
     * Denne metode laver et nyt lån
     * @param id Setter id på et nyoprettet lån
     * borrowDate Setter borrowDate på et nyoprettet lån
     * period Setter period på et nyoprettet lån
     * state Setter state på et nyoprettet lån
     */
    public void createLoan(String id, String borrowDate, String period, String state, Person p1, Copy c1)
    {
        Loan l = new Loan(id, borrowDate, period, state, p1, c1);
        lc.addLoan(l);
        dc.removeCopy(c1);
    }
    
    /**
     * Denne metode finder et lån, ved søgning på id
     * @param id Her bruges id, til at søge på et lån
     * @return Returnerer et lån
     */
    public Loan findLoan(String ID)
    {
        return lc.findLoan(ID);
    }
    
    /**
     * Her får man en liste med alle de oprettede lån
     */
    public void listAllLoans()
    {
        lc.listLoans();
    }
    
    public void returnLoan(Loan l)
    {
        Copy c = lc.getCopy(l);
        DVD returnDVD = c.getMyDVD();
        dc.createCopy(returnDVD, c.getSerialNumber(), c.getPurchaseDate(), c.getPurchasePrice());
        lc.setLoanStateReturn(l);
    }

}
